96cda17d1df681a885e0f5383409673be6598fd6,source/org/jasig/portal/channels/groupsmanager/commands/CreateGroup.java,CreateGroup,execute,#CGroupsManagerSessionData#,80

Before Change


      ChannelStaticData staticData = sessionData.staticData;
      ChannelRuntimeData runtimeData= sessionData.runtimeData;

      Utility.logMessage("DEBUG", "CreateGroup::execute(): Start");
      Document model = getXmlDoc(sessionData);
      String theCommand = runtimeData.getParameter("grpCommand");
      String parentID = getCommandArg(runtimeData);
      boolean parentIsInitialGroupContext = parentIsInitialGroupContext(parentID);
      String newGrpName = runtimeData.getParameter("grpNewName");
      Utility.logMessage("DEBUG", "CreateGroup::execute(): New grp: " + newGrpName +
            " will be added to parent element = " + parentID);
      IEntityGroup parentGroup = null;
      Class parentEntityType;
      Element parentElem = GroupsManagerXML.getElementByTagNameAndId(model, GROUP_TAGNAME, parentID);
      String parentKey = parentElem.getAttribute("key");
      String retMsg;
      Iterator parentNodes;
      if (parentElem == null) {
         retMsg = "Unable to find Parent element!";
         sessionData.feedback = retMsg;
         Utility.logMessage("ERROR", "CreateGroup::execute(): " + retMsg);
         return;
      }
      Utility.logMessage("DEBUG", "CreateGroup::execute(): Parent element was found!");
      try {
         // The parent could be an IGroupMember or an IInitialGroupContext.
         if (!parentIsInitialGroupContext) {
            parentGroup = GroupsManagerXML.retrieveGroup(parentKey);
            if (parentGroup == null) {
               retMsg = "Unable to retrieve Parent Entity Group!";
               sessionData.feedback = retMsg;
               return;
            }
            else {
               parentEntityType = parentGroup.getLeafType();
            }
         }
         else {
            /** @todo A list will be presented to the user who will select the type
             *  of group to create */
            parentEntityType = Class.forName((String) GroupsManagerXML.getEntityTypes().get("IPerson"));
         }
         Utility.logMessage("DEBUG", "CreateGroup::execute(): About to create new group: "
               + newGrpName);
         // Next line creates a group that will hold iEntities
         String userID = getUserID(sessionData);
         IEntityGroup childEntGrp = GroupService.newGroup(parentEntityType);
         childEntGrp.setName(newGrpName);
         childEntGrp.setCreatorID(userID);
         childEntGrp.update();
         Utility.logMessage("DEBUG", "CreateGroup::execute(): About to add new group: "
               + newGrpName);
         if (parentIsInitialGroupContext) {
            IInitialGroupContext igc = Utility.createInitialGroupContext(userID, "p",
                  childEntGrp.getKey(), 1, false, null);
            igc.update();
            Node parentNode = (Node)parentElem;
            Element childElem = GroupsManagerXML.getGroupMemberXml((IGroupMember)childEntGrp,
                  false, null, model);
            parentNode.appendChild((Node)childElem);
         }
         else {
            parentGroup.addMember((IGroupMember)childEntGrp);
            parentGroup.updateMembers();
            parentNodes = GroupsManagerXML.getNodesByTagNameAndKey(model, GROUP_TAGNAME, parentKey);
            // add new group to all parent group xml nodes
            while (parentNodes.hasNext()) {
               Element parentNode = (Element)parentNodes.next();
               GroupsManagerXML.getGroupMemberXml((IGroupMember)parentGroup, true, parentNode,
                     model);
               ((Element)parentNode).setAttribute("hasMembers", "true");
            }
         }

         /** Grant all permissions for the new group to the creator */
         /** @todo need to catch following exceptions for next block of code
          *  org.jasig.portal.AuthorizationException
          *  java.lang.IllegalAccessException
          *  java.lang.InstantiationException */
         ArrayList perms = new ArrayList();
         IUpdatingPermissionManager upm = AuthorizationService.instance().newUpdatingPermissionManager(OWNER);
         IAuthorizationPrincipal ap = staticData.getAuthorizationPrincipal();
         Utility.logMessage("DEBUG", "CreateGroup::execute(): The IAuthorizationPrincipal: " + ap);
         String[] activities = ((IPermissible)Class.forName(OWNER).newInstance()).getActivityTokens();
         IPermission prm;
         for (int a = 0; a < activities.length; a++) {
            prm = upm.newPermission(ap);
            prm.setActivity(activities[a]);
            prm.setTarget(childEntGrp.getKey());
            prm.setType("GRANT");
            perms.add(prm);
         }
         upm.addPermissions((IPermission[])perms.toArray(new IPermission[perms.size()]));

         // create permission elements
         /** @todo should make sure there is one and only one principal element */
         NodeList principals = model.getDocumentElement().getElementsByTagName("principal");
         Element princElem = (Element)principals.item(0);
         for (int p = 0; p < perms.size(); p++) {
            prm = (IPermission)perms.get(p);
            Element permElem = GroupsManagerXML.getPermissionXml(model, prm.getPrincipal(), prm.getActivity(), prm.getType(), prm.getTarget());
            /** @todo should we check if element already exists??? */
            princElem.appendChild(permElem);
         }
         // Parent was locked so no other thread or process could have changed it, but
         // child members could have changed.
         GroupsManagerXML.refreshAllNodesRecursivelyIfRequired(model, parentElem);
      } catch (GroupsException ge) {
         retMsg = "Unable to create new group\n" + ge;
         sessionData.feedback = retMsg;
         Utility.logMessage("ERROR", "CreateGroup::execute(): " + retMsg + "\n" + ge);
      } catch (ClassNotFoundException cnfe) {
         retMsg = "Unable to instantiate class " + GROUP_CLASSNAME;
         sessionData.feedback = retMsg;
         Utility.logMessage("ERROR", "CreateGroup::execute(): " + retMsg + "\n" + cnfe);
      } catch (Exception e) {
         retMsg = "Unable to create group";
         sessionData.feedback = retMsg;
         Utility.logMessage("ERROR", "CreateGroup::execute(): " + retMsg + ".\n" + e);
      }
      Utility.logMessage("DEBUG", "CreateGroup::execute(): Finished");
   }
}

After Change


      ChannelStaticData staticData = sessionData.staticData;
      ChannelRuntimeData runtimeData= sessionData.runtimeData;

      Utility.logMessage("DEBUG", "CreateGroup::execute(): Start");
      Document model = getXmlDoc(sessionData);
      String theCommand = runtimeData.getParameter("grpCommand");
      String parentID = getCommandArg(runtimeData);
      boolean parentIsInitialGroupContext = parentIsInitialGroupContext(parentID);
      String newGrpName = runtimeData.getParameter("grpNewName");
      Utility.logMessage("DEBUG", "CreateGroup::execute(): New grp: " + newGrpName +
            " will be added to parent element = " + parentID);
      IEntityGroup parentGroup = null;
      Class parentEntityType;
      Element parentElem = GroupsManagerXML.getElementByTagNameAndId(model, GROUP_TAGNAME, parentID);
      String parentKey = parentElem.getAttribute("key");
      String retMsg;
      Iterator parentNodes;
      if (parentElem == null) {
         retMsg = "Unable to find Parent element!";
         sessionData.feedback = retMsg;
         Utility.logMessage("ERROR", "CreateGroup::execute(): " + retMsg);
         return;
      }
      Utility.logMessage("DEBUG", "CreateGroup::execute(): Parent element was found!");

      // The parent could be an IGroupMember or an IInitialGroupContext.
      if (!parentIsInitialGroupContext) {
         parentGroup = GroupsManagerXML.retrieveGroup(parentKey);
         if (parentGroup == null) {
            retMsg = "Unable to retrieve Parent Entity Group!";
            sessionData.feedback = retMsg;
            return;
         }
         else {
            parentEntityType = parentGroup.getLeafType();
         }
      }
      else {
         /** @todo A list will be presented to the user who will select the type
          *  of group to create */
         parentEntityType = Class.forName((String) GroupsManagerXML.getEntityTypes().get("IPerson"));
      }
      Utility.logMessage("DEBUG", "CreateGroup::execute(): About to create new group: "
            + newGrpName);
      // Next line creates a group that will hold iEntities
      String userID = getUserID(sessionData);
      IEntityGroup childEntGrp = GroupService.newGroup(parentEntityType);
      childEntGrp.setName(newGrpName);
      childEntGrp.setCreatorID(userID);
      childEntGrp.update();
      Utility.logMessage("DEBUG", "CreateGroup::execute(): About to add new group: "
            + newGrpName);
      if (parentIsInitialGroupContext) {
         IInitialGroupContext igc = Utility.createInitialGroupContext(userID, "p",
               childEntGrp.getKey(), 1, false, null);
         igc.update();
         Node parentNode = (Node)parentElem;
         Element childElem = GroupsManagerXML.getGroupMemberXml((IGroupMember)childEntGrp,
               false, null, model);
         parentNode.appendChild((Node)childElem);
      }
      else {
         parentGroup.addMember((IGroupMember)childEntGrp);
         parentGroup.updateMembers();
         parentNodes = GroupsManagerXML.getNodesByTagNameAndKey(model, GROUP_TAGNAME, parentKey);
         // add new group to all parent group xml nodes
         while (parentNodes.hasNext()) {
            Element parentNode = (Element)parentNodes.next();
            GroupsManagerXML.getGroupMemberXml((IGroupMember)parentGroup, true, parentNode,
                  model);
            ((Element)parentNode).setAttribute("hasMembers", "true");
         }
      }

      /** Grant all permissions for the new group to the creator */
      /** @todo need to catch following exceptions for next block of code
       *  org.jasig.portal.AuthorizationException
       *  java.lang.IllegalAccessException
       *  java.lang.InstantiationException */
      ArrayList perms = new ArrayList();
      IUpdatingPermissionManager upm = AuthorizationService.instance().newUpdatingPermissionManager(OWNER);
      IAuthorizationPrincipal ap = staticData.getAuthorizationPrincipal();
      Utility.logMessage("DEBUG", "CreateGroup::execute(): The IAuthorizationPrincipal: " + ap);
      String[] activities = ((IPermissible)Class.forName(OWNER).newInstance()).getActivityTokens();
      IPermission prm;
      for (int a = 0; a < activities.length; a++) {
         prm = upm.newPermission(ap);
         prm.setActivity(activities[a]);
         prm.setTarget(childEntGrp.getKey());
         prm.setType("GRANT");
         perms.add(prm);
      }
      upm.addPermissions((IPermission[])perms.toArray(new IPermission[perms.size()]));

      // create permission elements
      /** @todo should make sure there is one and only one principal element */
      NodeList principals = model.getDocumentElement().getElementsByTagName("principal");
      Element princElem = (Element)principals.item(0);
      for (int p = 0; p < perms.size(); p++) {
         prm = (IPermission)perms.get(p);
         Element permElem = GroupsManagerXML.getPermissionXml(model, prm.getPrincipal(), prm.getActivity(), prm.getType(), prm.getTarget());
         /** @todo should we check if element already exists??? */
         princElem.appendChild(permElem);
      }
      // Parent was locked so no other thread or process could have changed it, but
      // child members could have changed.
      GroupsManagerXML.refreshAllNodesRecursivelyIfRequired(model, parentElem);

      Utility.logMessage("DEBUG", "CreateGroup::execute(): Finished");
   }
}